﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>RegRead</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/commands.css" rel="stylesheet" type="text/css">
<link href="../css/print.css" rel="stylesheet" type="text/css" media="print">
</head>
<body>

<h1>RegRead</h1>

<p>从注册表中读取一个值。</p>

<p class="CommandSyntax">RegRead, OutputVar, RootKey, SubKey [, ValueName]</p>
<h3>参数 </h3>
<table border="1" width="100%" cellspacing="0" cellpadding="3" bordercolor="#C0C0C0">
  <tr>
    <td>OutputVar</td>
    <td>存储返回值的变量名。如果获取值失败，它会被设置为空，同时 <a href="../misc/ErrorLevel.htm">ErrorLevel/错误级别</a> 被设置为 1 。</td>
  </tr>
  <tr>
    <td width="15%">RootKey</td>
    <td width="85%">只能是 HKEY_LOCAL_MACHINE 、HKEY_USERS 、HKEY_CURRENT_USER 、HKEY_CLASSES_ROOT 、HKEY_CURRENT_CONFIG 其中之一（或者它们的缩写，例如 HKLM ）。要访问远程注册表，在前面加上电脑名和一个冒号，例如：\\workstation01:HKEY_LOCAL_MACHINE</td>
  </tr>
  <tr>
    <td>SubKey</td>
    <td>子键的名字（例如 Software\SomeApplication）。</td>
  </tr>
  <tr>
    <td>ValueName</td>
    <td>需要读取的项的名称。如果省略，将返回 <em>Subkey</em> 的默认值，也就是在 RegEdit 中显示为“(Default)/默认”的值。如果没有默认值（也就是 RegEdit 中显示“value not set/数值未设置”），<em>OutputVar</em> 被设置为空，同时 ErrorLevel/错误级别 被设置为 1 。</td>
  </tr>
</table>
<h3>ErrorLevel/错误级别</h3>
<p>如果遇到问题（例如读取不存在的键或值），<a href="../misc/ErrorLevel.htm">ErrorLevel/错误级别</a> 被设置为 1 ，否则为 0 。</p>
<h3>注意</h3>
<p>目前只支持这些类型的值：REG_SZ/字符串值 ，REG_EXPAND_SZ/可扩充字符串值 ，REG_MULTI_SZ/多字符串值 ，REG_DWORD/DWORD值 ，以及 REG_BINARY/二进制值 。</p>
<p>REG_DWORD/DWORD 类型的值总是被转换为正的十进制数字。</p>
<p>REG_BINARY/二进制 类型的值最多只能读取 64KB ，其它类型的值则没有限制。但是在 Windows 95/98/ME 下，所有类型的值最多只能读取 64KB（ Win9x 的注册表不能存储过大的数据）。</p>
<p> 当读取 REG_BINARY/二进制 类型的值的时候，会返回一个16进制的字符串。例如，REG_BINARY/二进制 值为 01,a9,ff,77 ，读取出来的结果为 01A9FF77 。</p>
<p>当读取一个 REG_MULTI_SZ/多字符串 类型的值的时候，值的每一个部分以换行符分隔（`n）。如果值为空，<em>OutputVar</em> 被设置为空。<a href="FileSelectFile.htm">FileSelectFile</a> 中的示例演示了怎么将 <em>OutputVar</em> 分解为各个独立的部分。注意：Windows 95 不支持 REG_MULTI_SZ/多字符串 类型的值。</p>
<p>要返回多个注册表值或对多个注册表值进行操作，推荐使用 <a href="LoopReg.htm">registry-loop</a> 。</p>
<p>要获取访问远程注册表的详细资料，可以查看 <a href="LoopReg.htm">registry-loop</a> 中的注释。</p>
<h3>相关命令</h3>
<p><a href="RegDelete.htm">RegDelete</a>, <a href="RegWrite.htm">RegWrite</a>, <a href="LoopReg.htm">Registry-loop</a>, <a href="IniRead.htm">IniRead</a> </p>
<h3>示例</h3>
<pre class="NoIndent">RegRead, OutputVar, HKEY_LOCAL_MACHINE, SOFTWARE\Microsoft\Windows\CurrentVersion, ProgramFilesDir
MsgBox, Program files are in: %OutputVar%</pre>
<p>&nbsp;</p>
<pre class="NoIndent"><em>; 下面的例子返回一个注册表值的类型（例如 REG_SZ/字符串值 或 REG_DWORD/DWORD值）。</em>
MsgBox % RegKeyType(&quot;HKCU&quot;, &quot;Environment&quot;, &quot;TEMP&quot;)
return

RegKeyType(RootKey, SubKey, ValueName)  <em>; 这个函数返回指定值的类型。</em>
{
    Loop, %RootKey%, %SubKey%
        if (A_LoopRegName = ValueName)
            return A_LoopRegType
    return &quot;Error&quot;
}</pre>

</body>
</html>
